package org.example.servicepay.service;

import org.example.servicepay.entity.FeeItem;
import org.example.servicepay.vo.PublishFeeItemRequest;
import org.example.model.manage.bean.Result;

import java.util.List;

/**
 * 缴费项目服务接口（学生处功能）
 */
public interface FeeItemService {

    /**
     * 发布缴费项目
     * @param request 发布缴费项目请求参数
     * @param publisherId 发布人ID
     * @param publisherName 发布人姓名
     * @return 操作结果
     */
    Result<FeeItem> publishFeeItem(PublishFeeItemRequest request, String publisherId, String publisherName);

    /**
     * 更新缴费项目
     * @param feeItemId 缴费项目ID
     * @param request 更新请求参数
     * @param operatorId 操作人ID
     * @return 操作结果
     */
    Result<FeeItem> updateFeeItem(Long feeItemId, PublishFeeItemRequest request, String operatorId);

    /**
     * 取消缴费项目
     * @param feeItemId 缴费项目ID
     * @param operatorId 操作人ID
     * @return 操作结果
     */
    Result<String> cancelFeeItem(Long feeItemId, String operatorId);

    /**
     * 查询缴费项目详情
     * @param feeItemId 缴费项目ID
     * @return 缴费项目详情
     */
    Result<FeeItem> getFeeItemDetail(Long feeItemId);

    /**
     * 查询所有有效的缴费项目
     * @return 缴费项目列表
     */
    Result<List<FeeItem>> getActiveFeeItems();

    /**
     * 根据发布人查询缴费项目
     * @param publisherId 发布人ID
     * @return 缴费项目列表
     */
    Result<List<FeeItem>> getFeeItemsByPublisher(String publisherId);

    /**
     * 根据专业ID查询可缴费项目
     * @param majorId 专业ID
     * @return 缴费项目列表
     */
    Result<List<FeeItem>> getFeeItemsByMajor(Long majorId);

    /**
     * 根据学院ID查询可缴费项目
     * @param facultyId 学院ID
     * @return 缴费项目列表
     */
    Result<List<FeeItem>> getFeeItemsByFaculty(Long facultyId);

    /**
     * 为指定专业的学生初始化缴费记录
     * @param feeItemId 缴费项目ID
     * @param majorIds 专业ID列表
     * @return 初始化结果
     */
    Result<String> initializeFeeRecordsForMajors(Long feeItemId, List<Long> majorIds);
}